/*题目：
*给定一个整数数组 nums和一个整数目标值 target，请你在该数组中找出和为目标值target
*  的那两个整数，并返回它们的数组下标;
* 示例：输入：nums = [2,7,11,15], target = 9;
       输出：[0,1];*/


package javacode;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Random;
class Test1{
    public static void main(String[] args){
       /* 定义一个数组;*/
        Scanner in = new Scanner(System.in);
        System.out.println("请输入一个数n作为数组的维数");
        int n=in.nextInt();
        int[] nums=new int[n];
        System.out.println("请任意输入n个正整数");
        for(int i=0;i<n;i++){
            nums[i]=in.nextInt();
        }
       /* 求数组中任意狂数之和;*/
        int s=(int)(n*(n-1))/2;
        int a=0;
        int[] sum=new int[s];
        for(int i=0;i<n-1;i++) {
            for (int j = i + 1; j < n; j++) {
                if (a <= s) {
                    sum[a] = nums[i] + nums[j];
                    a++;
                }
            }
        }
        for(a=0;a<s;a++){
            System.out.print(sum[a]+"  ");
        }
       /* 利用Random类随机抽取一个数赋值给target;*/
        int x=new Random().nextInt(s);
        int target=sum[x];
        System.out.println(target);
       /* 第一种方法;*/
//        for(int i=0;i<n-1;i++){
//            for(int j=i+1;j<n;j++){
//                if(target==nums[i]+nums[j]){
//                    System.out.println(i+","+j);
//                }
//                else{
//                    continue;
//                }
//            }
//        }
       /* 第二种方法;*/
        // 建立k-v ，一一对应的哈希表
        HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();
        int[] indexs=new int[2];
        for(int i = 0; i < n; i++){
            if(hash.containsKey(nums[i])){
                indexs[0] = i;
                indexs[1] = hash.get(nums[i]);
            }
            // 将数据存入 key为补数 ，value为下标
            hash.put(target-nums[i],i);
        }
        for(int i=0;i<2;i++){
            System.out.print(indexs[i]+",");
        }
    }
}

